package magchess10.rn.controle;

import java.util.Timer;
import java.util.TimerTask;

import javax.swing.JLabel;

public class ControleRelogio {

	private Timer[] relogiosJogo = new Timer[4];
	private TaskRelogio[] tarefasRelogios = new TaskRelogio[4];
	private JLabel[] lblRelogios;
	private ControleJogo controleJogo;

	public ControleRelogio(JLabel[] lblRelogios, ControleJogo controleJogo) {
		this.lblRelogios = lblRelogios;
		this.controleJogo = controleJogo;
		associarRelogios();
		associarTarefas();
		iniciarRelogios();
	}

	public ControleJogo getControleJogo() {
		return controleJogo;
	}

	private void associarRelogios() {
		for (int i = 0; i < 4; i++)
			relogiosJogo[i] = new Timer();

	}

	private void associarTarefas() {
		for (int i = 0; i < 4; i++)
			tarefasRelogios[i] = new TaskRelogio(i);
	}

	public void atualizaLabel(int p_numeroJogador) {
		lblRelogios[p_numeroJogador]
				.setText(tempoAtualDecrementadoConvertido(p_numeroJogador));
	}

	private String tempoAtualDecrementadoConvertido(int p_numeroJogador) {
		return getMinutosDecrementados(p_numeroJogador) + ":"
				+ getSegundosDecrementados(p_numeroJogador);
	}

	private String getMinutosDecrementados(int p_numeroJogador) {
		return String
				.valueOf(((int) (getTempoJogadorAlvo(p_numeroJogador)) / 60));
	}

	private String getSegundosDecrementados(int numeroJogador) {
		float tempo = decrementaTempoJogadorAlvo(numeroJogador) % 60;

		String s = tempo < 10 ? "0" : "";
		return String.valueOf(s + (int) tempo);
	}

	private float getTempoJogadorAlvo(int p_numeroJogador) {
		return getControleJogo().getTempoJogadores(p_numeroJogador);
	}

	private float decrementaTempoJogadorAlvo(int numeroJogador) {
		return getControleJogo().decrementaTempoJogador(numeroJogador);

	}

	public void iniciarRelogios() {
		for (int i = 0; i < 4; i++)
			if (verificarTurnoJogadorAlvo(i))
				relogiosJogo[i].schedule(tarefasRelogios[i], 0, 1000);

	}
	
	public void trocarTurno (int indiceParaCancelar, int indiceParaAtivar) {
		relogiosJogo[indiceParaCancelar].cancel();
		relogiosJogo[indiceParaAtivar].schedule(tarefasRelogios[indiceParaAtivar], 0, 1000);
		
		
			
	}
	
	
	private boolean verificarTurnoJogadorAlvo(int p_numeroJogador) {
        return controleJogo.getTurnoJogadorAlvo(p_numeroJogador);
    }

	private class TaskRelogio extends TimerTask {

		private int numeroRelogio;

		public TaskRelogio(int numeroRelogio) {
			this.numeroRelogio = numeroRelogio;
		}

		@Override
		public void run() {
			atualizaLabel(numeroRelogio);
		}

	}

}
